﻿using System;
using System.Collections.Generic;
using System.Web;
using VariablesGlobalesNamespace;
//using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
using ExcelLibrary;
using System.Data;
using System.IO;
using DBMethodsNamespace;
using WebMsgBoxNamespace;
using BackstageMusiciansFriend;
using System.Collections;
using ControlLogNamespace;
using ControlCompetenciaNamespace;
using ControlModificacionDePreciosNamespace;
using ControlSesionNamespace;
using ControlImportacionNamespace;

public class Reporte
{
	public static ArrayList arrLstProductosAll;
	public static ArrayList arrLstProductosNuevos;
	public static ArrayList arrLstProductosNoEstan;
	public static ArrayList arrLstProductosCambios;
	public static ArrayList arrLstCalificacionesNuevas;
	public static List<Calificacion> lstCalificacion;
}

/// <summary>
/// Summary description for ControlRepor
/// te
/// </summary>
public class ControlReporte
{

	#region Properties
	string strStyleDefault;
	#endregion
	#region Constructor
	public ControlReporte()
	{
		strStyleDefault = "<style=\"border-width:2px; color:red\"/>";
	}
	#endregion

	#region Metodos de Estilo
	public static string estiloAzul()
	{
		string strEstilo = "style=\"font-family:Tahoma; width:800px; border-style:Solid; border-width:2px; border-color:Blue; background-color:LightBlue; color:Blue\"";
		return strEstilo;
	}
	public static string estiloVerde()
	{
		string strEstilo = "style=\"font-family:Tahoma; width:800px; border-style:Solid; border-width:2px; border-color:Green; background-color:PaleGreen; color:Green\"";
		return strEstilo;
	}
	public static string estiloNaranja()
	{
		string strEstilo = "style=\"font-family:Tahoma; width:800px; border-style:Solid; border-width:2px; border-color:Orange; background-color:Khaki; color:Orange\"";
		return strEstilo;
	}
	public static string estiloRojo()
	{
		string strEstilo = "style=\"font-family:Tahoma; width:1024px; border-style:Solid; border-width:2px; border-color:Red; background-color:PaleRed; color:Red\"";
		return strEstilo;
	}
	#endregion

	#region Metodos de Exportacion
	public static string procesarReporteTotalizadores(Competidor objCompetidor, int intEstilo)
	{
		string sAux = "";

		objCompetidor.refrescarEstadisticas();

		ControlLog.writeLog("[procesarReporteTotalizadores] Armando reporte de totalizadores para competidor: " + objCompetidor.Nickname);
		switch (intEstilo)
		{
			default:
			case 0:
				sAux += "<br/><br/><tr><td colspan=2 align=center><table " + ControlReporte.estiloAzul() + ">";
				break;
			case 1:
				sAux += "<br/><br/><tr><td colspan=2 align=center><table " + ControlReporte.estiloVerde() + ">";
				break;
			case 2:
				sAux += "<br/><br/><tr><td colspan=2 align=center><table " + ControlReporte.estiloNaranja() + ">";
				break;
		}

		ControlLog.writeLog("[procesarReporteTotalizadores] Estilos agregados OK! ");
		sAux += "<tr><td><h2><b>Competidor " + objCompetidor.Nickname + " (" + objCompetidor.IdML + ") - Link = <a href=\"" + objCompetidor.Link + "\">" + objCompetidor.Link + "</a></b></h2></td></tr></br>";
		sAux += "<tr><td><h4><b>Totalizadores</b></h4></td></tr></br>";
		sAux += "<tr><td><b> Cantidad de Publicaciones: " + objCompetidor.getEstadisticas().CantPublicaciones + "</b></td></tr>";


		ControlLog.writeLog("[procesarReporteTotalizadores] Header agregado OK! ");
		sAux += "<br/>";
		sAux += "<tr><td> Transacciones realizadas en el per&iacute;odo: " + objCompetidor.getEstadisticas().TxTotal + "</td></tr>";
		sAux += "<br/>";
		sAux += "<tr><td> Transacciones OK en el per&iacute;odo: " + objCompetidor.getEstadisticas().TxCompletadas + "</td></tr>";
		sAux += "<tr><td> Transacciones Canceladas en el per&iacute;odo: " + objCompetidor.getEstadisticas().TxCanceladas + "</td></tr>";
		sAux += "<br/>";
		ControlLog.writeLog("[procesarReporteTotalizadores] Informe de transacciones agregado OK! ");
		sAux += "<tr><td><b> Cantidad de Calificaciones: " + objCompetidor.getEstadisticas().CantCalificaciones + "</b></td></tr>";
		sAux += "<tr><td> Calificaciones Positivas obtenidas en el per&iacute;odo: " + objCompetidor.getEstadisticas().RankPositivo + "</td></tr>";
		sAux += "<tr><td> Calificaciones Neutrales obtenidas en el per&iacute;odo: " + objCompetidor.getEstadisticas().RankNeutro + "</td></tr>";
		sAux += "<tr><td> Calificaciones Negativas obtenidas en el per&iacute;odo: " + objCompetidor.getEstadisticas().RankNegativo + "</td></tr>";
		sAux += "</table></td></tr>";
		ControlLog.writeLog("[procesarReporteTotalizadores] Informe de calificaciones agregado OK! ");
		return sAux;
	}
	#endregion

	#region Exportacion XLS
	/// <summary>
	/// Arma un Excel con la informacion de reporte del competidor
	/// </summary>
	/// <param name="strNickName">String con el NickName del Competidor</param>
	/// <param name="strId">String con el ID de DB</param>

	/// <returns>MemoryStream que debe ser enviado por el metodo Response.Output</returns>
	public static MemoryStream exportarXLSReporteDiferencial(string strNickName, string strId, ArrayList arrLstProductosNuevos,
																ArrayList arrLstProductosNoEstan, ArrayList arrLstProductosCambios,
																ArrayList arrLstProductosAll, ArrayList arrLstCalificacionesNuevas,
																List<Calificacion> lstCalificacionesAll,
																Parametros objParametros)
	{

		DataSet ds = new DataSet("New_DataSet");

		DataTable dtProductosNuevos = new DataTable("Productos Nuevos");
		DataTable dtProductosQueYaNoEstan = new DataTable("Productos que ya no están");
		DataTable dtListaPreciosCompetidor = new DataTable("Lista de Precios " + strNickName);
		DataTable dtProductosQueCambiaronElPrecio = new DataTable("Productos q cambiaron el precio");
		DataTable dtCalificacionesNuevas = new DataTable("Calificaciones Nuevas");
		DataTable dtHistorialCompletoCalificaciones = new DataTable("Historial Completo (Calif.)");

		ControlLog.writeLog("[exportarXLSReporteDiferencial] Armando reporte diferencial");


		dtProductosNuevos.Columns.Add("Link");
		dtProductosNuevos.Columns.Add("Titulo");
		dtProductosNuevos.Columns.Add("Moneda");
		dtProductosNuevos.Columns.Add("Precio");
		dtProductosNuevos.Columns.Add("Cantidad que figuran vendidos");
		dtProductosNuevos.Columns.Add("Estado");

		ControlLog.writeLog("[exportarXLSReporteDiferencial] Armando de tablas dtProductosNuevos OK");

		dtProductosQueYaNoEstan.Columns.Add("Link");
		dtProductosQueYaNoEstan.Columns.Add("Titulo");
		dtProductosQueYaNoEstan.Columns.Add("Moneda");
		dtProductosQueYaNoEstan.Columns.Add("Precio");
		dtProductosQueYaNoEstan.Columns.Add("Cantidad que figuran vendidos");
		dtProductosQueYaNoEstan.Columns.Add("Estado");


		ControlLog.writeLog("[exportarXLSReporteDiferencial] Armando de tablas dtProductosQueYaNoEstan OK");

		dtListaPreciosCompetidor.Columns.Add("Link");
		dtListaPreciosCompetidor.Columns.Add("Titulo");
		dtListaPreciosCompetidor.Columns.Add("Moneda");
		dtListaPreciosCompetidor.Columns.Add("Precio");
		dtListaPreciosCompetidor.Columns.Add("Cantidad que figuran vendidos");
		dtListaPreciosCompetidor.Columns.Add("Estado");


		ControlLog.writeLog("[exportarXLSReporteDiferencial] Armando de tablas dtListaPreciosCompetidor OK");
		dtProductosQueCambiaronElPrecio.Columns.Add("Link");
		dtProductosQueCambiaronElPrecio.Columns.Add("Titulo");
		dtProductosQueCambiaronElPrecio.Columns.Add("Moneda NUEVO");
		dtProductosQueCambiaronElPrecio.Columns.Add("Precio NUEVO");
		dtProductosQueCambiaronElPrecio.Columns.Add("Moneda VIEJO");
		dtProductosQueCambiaronElPrecio.Columns.Add("Precio VIEJO");
		dtProductosQueCambiaronElPrecio.Columns.Add("Cantidad que figuran vendidos");
		dtProductosQueCambiaronElPrecio.Columns.Add("Estado");

		ControlLog.writeLog("[exportarXLSReporteDiferencial] Armando de tablas dtProductosQueCambiaronElPrecio OK");

		dtCalificacionesNuevas.Columns.Add("Fecha");
		dtCalificacionesNuevas.Columns.Add("Link Producto");
		dtCalificacionesNuevas.Columns.Add("Titulo");
		dtCalificacionesNuevas.Columns.Add("ESTADO");
		dtCalificacionesNuevas.Columns.Add("Moneda");
		dtCalificacionesNuevas.Columns.Add("Precio");
		dtCalificacionesNuevas.Columns.Add("Usuario");
		dtCalificacionesNuevas.Columns.Add("Link de Usuario");
		dtCalificacionesNuevas.Columns.Add("Calificacion");
		dtCalificacionesNuevas.Columns.Add("Comentario");


		ControlLog.writeLog("[exportarXLSReporteDiferencial] Armando de tablas dtCalificacionesNuevas OK");
		dtHistorialCompletoCalificaciones.Columns.Add("Fecha");
		dtHistorialCompletoCalificaciones.Columns.Add("Link Producto");
		dtHistorialCompletoCalificaciones.Columns.Add("Titulo");
		dtHistorialCompletoCalificaciones.Columns.Add("ESTADO");
		dtHistorialCompletoCalificaciones.Columns.Add("Moneda");
		dtHistorialCompletoCalificaciones.Columns.Add("Precio");
		dtHistorialCompletoCalificaciones.Columns.Add("Usuario");
		dtHistorialCompletoCalificaciones.Columns.Add("Link de Usuario");
		dtHistorialCompletoCalificaciones.Columns.Add("Calificacion");
		dtHistorialCompletoCalificaciones.Columns.Add("Comentario");


		ControlLog.writeLog("[exportarXLSReporteDiferencial] Armando de tablas dtHistorialCompletoCalificaciones OK");
		#region Obtener Productos Nuevos
		try
		{
			if (objParametros.Productos)
			{
				if (arrLstProductosNuevos != null)
				{
					for (int i = 0; i < arrLstProductosNuevos.Count; i++)
					{

						Producto objProducto = (Producto)arrLstProductosNuevos[i];
						dtProductosNuevos.Rows.Add(new object[] { objProducto.Link, objProducto.Titulo, objProducto.Moneda, objProducto.Precio, objProducto.CantVendido, objProducto.Estado });

						ControlLog.writeLog("[exportarXLSReporteDiferencial] Producto Nuevo " + (i + 1).ToString() + " agregado a la Tabla!");

					}

				}
			}


		}
		catch (Exception ee)
		{
			ControlLog.writeLog("[exportarXLSReporteDiferencial] Excepcion buscando productos nuevos del competidor: " + ee.Message);
			throw ee;
		}
		#endregion
		#region Obtener Productos
		try
		{
			if (objParametros.Productos)
			{
				if (arrLstProductosAll != null)
				{
					for (int i = 0; i < arrLstProductosAll.Count; i++)
					{
						Producto objProducto = (Producto)arrLstProductosAll[i];
						dtListaPreciosCompetidor.Rows.Add(new object[] { objProducto.Link, objProducto.Titulo, objProducto.Moneda, objProducto.Precio, objProducto.CantVendido, objProducto.Estado });
						ControlLog.writeLog("[exportarXLSReporteDiferencial] Producto Total " + (i + 1).ToString() + " agregado a la Tabla!");
					}

				}
			}


		}
		catch (Exception ee)
		{
			ControlLog.writeLog("[exportarXLSReporteDiferencial] Excepcion buscando productos totales del competidor: " + ee.Message);
			throw ee;
		}
		#endregion
		#region Obtener Productos Que no Estan
		try
		{
			if (objParametros.Productos)
			{
				if (arrLstProductosNoEstan != null)
				{
					for (int i = 0; i < arrLstProductosNoEstan.Count; i++)
					{
						Producto objProducto = (Producto)arrLstProductosNoEstan[i];
						dtProductosQueYaNoEstan.Rows.Add(new object[] { objProducto.Link, objProducto.Titulo, objProducto.Moneda, objProducto.Precio, objProducto.CantVendido, objProducto.Estado });
						ControlLog.writeLog("[exportarXLSReporteDiferencial] Producto que ya no esta " + (i + 1).ToString() + " agregado a la Tabla!");
					}

				}
			}


		}
		catch (Exception ee)
		{
			ControlLog.writeLog("[exportarXLSReporteDiferencial] Excepcion buscando productos que no estan del competidor: " + ee.Message);
			throw ee;
		}
		#endregion
		#region Obtener Productos Que Cambiaron el precio
		try
		{
			if (objParametros.Productos)
			{
				if (arrLstProductosCambios != null)
				{
					for (int i = 0; i < arrLstProductosCambios.Count; i++)
					{
						/*   dtProductosQueCambiaronElPrecio.Columns.Add("Link");
		dtProductosQueCambiaronElPrecio.Columns.Add("Titulo");
		dtProductosQueCambiaronElPrecio.Columns.Add("Moneda NUEVO");
		dtProductosQueCambiaronElPrecio.Columns.Add("Precio NUEVO");
		dtProductosQueCambiaronElPrecio.Columns.Add("Moneda VIEJO");
		dtProductosQueCambiaronElPrecio.Columns.Add("Precio VIEJO");
		dtProductosQueCambiaronElPrecio.Columns.Add("Cantidad que figuran vendidos");
		dtProductosQueCambiaronElPrecio.Columns.Add("Estado");*/
						ProductoCambio objProducto = (ProductoCambio)arrLstProductosCambios[i];
						dtProductosQueCambiaronElPrecio.Rows.Add(new object[] { objProducto.Prod.Link, objProducto.Prod.Titulo,
                                                                                objProducto.Prod.Moneda, objProducto.Prod.Precio,
                                                                                objProducto.MonedaAnterior,objProducto.PrecioAnterior,
                                                                                objProducto.Prod.CantVendido, objProducto.Prod.Estado});
						ControlLog.writeLog("[exportarXLSReporteDiferencial] Producto que cambio el precio " + (i + 1).ToString() + " agregado a la Tabla!");
					}

				}
			}


		}
		catch (Exception ee)
		{
			ControlLog.writeLog("[exportarXLSPerfil] Excepcion buscando productos que cambiaron el precio del competidor: " + ee.Message);
			throw ee;
		}
		#endregion
		#region Obtener Calificaciones Totales
		try
		{
			if (objParametros.Calificaciones)
			{

				ControlLog.writeLog("[exportarXLSReporteDiferencial] Se agregaran " + lstCalificacionesAll.Count.ToString() + " calificaciones....");

				foreach (Calificacion objCalificacion in lstCalificacionesAll)
				{
					dtHistorialCompletoCalificaciones.Rows.Add(new object[] { objCalificacion.Fecha, objCalificacion.Prod.Link,
                                                                                    objCalificacion.Prod.Titulo, objCalificacion.Prod.Estado,objCalificacion.Prod.Moneda.ToString(), objCalificacion.Prod.Precio,
                                                                                    objCalificacion.NickUsuario, objCalificacion.LinkUsuario, 
                                                                                    objCalificacion.Calification.ToString(), objCalificacion.Comentario });

					ControlLog.writeLog("[exportarXLSReporteDiferencial]  Fecha: " + objCalificacion.Fecha);
					ControlLog.writeLog("[exportarXLSReporteDiferencial]  Link: " + objCalificacion.Prod.Link);
					ControlLog.writeLog("[exportarXLSReporteDiferencial]  Titulo: " + objCalificacion.Prod.Titulo);
					ControlLog.writeLog("[exportarXLSReporteDiferencial]  Estado: " + objCalificacion.Prod.Estado);
					ControlLog.writeLog("[exportarXLSReporteDiferencial]  Moneda: " + objCalificacion.Prod.Moneda.ToString());
					ControlLog.writeLog("[exportarXLSReporteDiferencial]  Precio: " + objCalificacion.Prod.Precio.ToString());
					ControlLog.writeLog("[exportarXLSReporteDiferencial]  NickUsuario: " + objCalificacion.NickUsuario);
					ControlLog.writeLog("[exportarXLSReporteDiferencial]  LinkUsuario: " + objCalificacion.LinkUsuario);
					ControlLog.writeLog("[exportarXLSReporteDiferencial]  Calification: " + objCalificacion.Calification.ToString());
					ControlLog.writeLog("[exportarXLSReporteDiferencial]  Comentario: " + objCalificacion.Comentario);
				}


				ControlLog.writeLog("[exportarXLSReporteDiferencial] Se agregaron " + lstCalificacionesAll.Count.ToString() + " calificaciones a la Tabla!");



			}


		}
		catch (Exception ee)
		{
			ControlLog.writeLog("[exportarXLSPerfil] Excepcion buscando calificaciones totales del competidor: " + ee.Message);
			throw ee;
		}
		#endregion
		#region Obtener Calificaciones Nuevas
		try
		{
			if (objParametros.Calificaciones)
			{
				if (arrLstCalificacionesNuevas != null)
				{
					for (int i = 0; i < arrLstCalificacionesNuevas.Count; i++)
					{
						Calificacion objCalificacion = (Calificacion)arrLstCalificacionesNuevas[i];
						dtCalificacionesNuevas.Rows.Add(new object[] { objCalificacion.Fecha, objCalificacion.Prod.Link,
                                                                                    objCalificacion.Prod.Titulo, objCalificacion.Prod.Estado,objCalificacion.Prod.Moneda.ToString(), objCalificacion.Prod.Precio,
                                                                                    objCalificacion.NickUsuario, objCalificacion.LinkUsuario, 
                                                                                    objCalificacion.Calification.ToString(), objCalificacion.Comentario });

						ControlLog.writeLog("[exportarXLSReporteDiferencial]  Fecha: " + objCalificacion.Fecha);
						ControlLog.writeLog("[exportarXLSReporteDiferencial]  Link: " + objCalificacion.Prod.Link);
						ControlLog.writeLog("[exportarXLSReporteDiferencial]  Titulo: " + objCalificacion.Prod.Titulo);
						ControlLog.writeLog("[exportarXLSReporteDiferencial]  Estado: " + objCalificacion.Prod.Estado);
						ControlLog.writeLog("[exportarXLSReporteDiferencial]  Moneda: " + objCalificacion.Prod.Moneda.ToString());
						ControlLog.writeLog("[exportarXLSReporteDiferencial]  Precio: " + objCalificacion.Prod.Precio.ToString());
						ControlLog.writeLog("[exportarXLSReporteDiferencial]  NickUsuario: " + objCalificacion.NickUsuario);
						ControlLog.writeLog("[exportarXLSReporteDiferencial]  LinkUsuario: " + objCalificacion.LinkUsuario);
						ControlLog.writeLog("[exportarXLSReporteDiferencial]  Calification: " + objCalificacion.Calification.ToString());
						ControlLog.writeLog("[exportarXLSReporteDiferencial]  Comentario: " + objCalificacion.Comentario);
						ControlLog.writeLog("[exportarXLSReporteDiferencial] Calificacion Nueva " + (i + 1).ToString() + " agregada a la Tabla!");
					}

				}
			}


		}
		catch (Exception ee)
		{
			ControlLog.writeLog("[exportarXLSPerfil] Excepcion buscando productos del competidor: " + ee.Message);
			throw ee;
		}

		#endregion
		ds.Tables.Add(dtProductosNuevos);
		ds.Tables.Add(dtProductosQueYaNoEstan);
		ds.Tables.Add(dtProductosQueCambiaronElPrecio);
		ds.Tables.Add(dtCalificacionesNuevas);
		ds.Tables.Add(dtListaPreciosCompetidor);
		ds.Tables.Add(dtHistorialCompletoCalificaciones);

		MemoryStream m = new MemoryStream();
		try
		{
			ControlLog.writeLog("[exportarXLSReporteDiferencial] Creando Excel....");
			ExcelLibrary.DataSetHelper.CreateWorkbook(m, ds);
			ControlLog.writeLog("[exportarXLSReporteDiferencial] Excel creado OK!");
		}
		catch (Exception ee)
		{

			ControlLog.writeLog("[exportarXLSReporteDiferencial] Excepcion " + ee.Message);
		}
		return m;
	}

	public static MemoryStream ExportarModificacionesPendientes()
	{
		DataSet ds = new DataSet("New_DataSet");

		DataTable dt = new DataTable("Modificaciones pendientes al " +
															System.DateTime.Now.Day.ToString().PadLeft(2, '0')
															+ "-"
															+ System.DateTime.Now.Month.ToString().PadLeft(2, '0')
															+ "-"
															+ System.DateTime.Now.Year.ToString().PadLeft(4, '0'));


		dt.Columns.Add("Id Interno");
		dt.Columns.Add("Id Producto MercadoLibre");
		dt.Columns.Add("Precio Original");
		dt.Columns.Add("Moneda");
		dt.Columns.Add("Precio Modificado");
		dt.Columns.Add("Titulo publicacion");
		dt.Columns.Add("Link");


		#region Obtener Items a modificar
		try
		{
			DBMethods conn = new DBMethods();
			int indice = 0;
			foreach (ItemParaActualizar item in conn.ObtenerItemsPendientesDeModificacion(ControlSesion.session(ControlSesion.UsuarioLogin)))
			{
				dt.Rows.Add(new object[] {  indice.ToString().PadLeft(6,'0'),
                                                item.ItemOriginal.id,
                                                item.ItemOriginal.price,
                                                item.ItemOriginal.currency_id,
                                                item.Monto.ToString(),
                                                item.ItemOriginal.title,
                                                item.ItemOriginal.permalink
                                                });
				indice++;
			}


		}
		catch (Exception ee)
		{
			ControlLog.writeLog("[ExportarModificacionesPendientes] Excepcion buscando productos del competidor: " + ee.Message);
			throw ee;
		}
		#endregion




		ControlLog.writeLog("[ExportarModificacionesPendientes] Agregando Tabla dt");
		ds.Tables.Add(dt);

		ControlLog.writeLog("[ExportarModificacionesPendientes] Preparando MemoryStream");
		MemoryStream m = new MemoryStream();

		ControlLog.writeLog("[ExportarModificacionesPendientes] Preparando ExcelLibrary");
		ExcelLibrary.DataSetHelper.CreateWorkbook(m, ds);


		ControlLog.writeLog("[ExportarModificacionesPendientes] Retornando...");
		return m;
	}
	public static MemoryStream ExportarModificacionesKo()
	{
		DataSet ds = new DataSet("New_DataSet");

		DataTable dt = new DataTable("Modificaciones fallidas al " +
															System.DateTime.Now.Day.ToString().PadLeft(2, '0')
															+ "-"
															+ System.DateTime.Now.Month.ToString().PadLeft(2, '0')
															+ "-"
															+ System.DateTime.Now.Year.ToString().PadLeft(4, '0'));


		dt.Columns.Add("Id Interno");
		dt.Columns.Add("Id Producto MercadoLibre");
		dt.Columns.Add("Precio Original");
		dt.Columns.Add("Moneda");
		dt.Columns.Add("Precio Modificado");
		dt.Columns.Add("Titulo publicacion");
		dt.Columns.Add("Link");
		dt.Columns.Add("Fecha de intento de modificación");
		dt.Columns.Add("Error - Mensaje");


		#region Obtener Items a modificar
		try
		{
			DBMethods conn = new DBMethods();
			int indice = 0;
			foreach (ItemParaActualizar item in conn.ObtenerItemsPendientesDeModificacionKo(ControlSesion.session(ControlSesion.UsuarioLogin)))
			{
				dt.Rows.Add(new object[] {  indice.ToString().PadLeft(6,'0'),
                                                item.ItemOriginal.id,
                                                item.ItemOriginal.price,
                                                item.ItemOriginal.currency_id,
                                                item.Monto.ToString(),
                                                item.ItemOriginal.title,
                                                item.ItemOriginal.permalink,
                                                item.FechaModificacion,
                                                item.Error
                                                });
				indice++;
			}


		}
		catch (Exception ee)
		{
			ControlLog.writeLog("[ExportarModificacionesKo] Excepcion buscando productos del competidor: " + ee.Message);
			throw ee;
		}
		#endregion




		ControlLog.writeLog("[ExportarModificacionesKo] Agregando Tabla dt");
		ds.Tables.Add(dt);

		ControlLog.writeLog("[ExportarModificacionesKo] Preparando MemoryStream");
		MemoryStream m = new MemoryStream();

		ControlLog.writeLog("[ExportarModificacionesKo] Preparando ExcelLibrary");
		ExcelLibrary.DataSetHelper.CreateWorkbook(m, ds);


		ControlLog.writeLog("[ExportarModificacionesKo] Retornando...");
		return m;
	}

	public static MemoryStream ExportarModificacionesOk()
	{
		DataSet ds = new DataSet("New_DataSet");

		DataTable dt = new DataTable("Modificaciones Ok al " +
															System.DateTime.Now.Day.ToString().PadLeft(2, '0')
															+ "-"
															+ System.DateTime.Now.Month.ToString().PadLeft(2, '0')
															+ "-"
															+ System.DateTime.Now.Year.ToString().PadLeft(4, '0'));


		dt.Columns.Add("Id Interno");
		dt.Columns.Add("Id Producto MercadoLibre");
		dt.Columns.Add("Precio Original");
		dt.Columns.Add("Moneda");
		dt.Columns.Add("Precio Modificado");
		dt.Columns.Add("Titulo publicacion");
		dt.Columns.Add("Link");
		dt.Columns.Add("Fecha de modificación");



		#region Obtener Items a modificar
		try
		{
			DBMethods conn = new DBMethods();
			int indice = 0;
			foreach (ItemParaActualizar item in conn.ObtenerItemsPendientesDeModificacionOk(ControlSesion.session(ControlSesion.UsuarioLogin)))
			{
				dt.Rows.Add(new object[] {  indice.ToString().PadLeft(6,'0'),
                                                item.ItemOriginal.id,
                                                item.ItemOriginal.price,
                                                item.ItemOriginal.currency_id,
                                                item.Monto.ToString(),
                                                item.ItemOriginal.title,
                                                item.ItemOriginal.permalink,
                                                item.FechaModificacion
                                                });
				indice++;
			}


		}
		catch (Exception ee)
		{
			ControlLog.writeLog("[ExportarModificacionesOk] Excepcion buscando productos del competidor: " + ee.Message);
			throw ee;
		}
		#endregion




		ControlLog.writeLog("[ExportarModificacionesOk] Agregando Tabla dt");
		ds.Tables.Add(dt);

		ControlLog.writeLog("[ExportarModificacionesOk] Preparando MemoryStream");
		MemoryStream m = new MemoryStream();

		ControlLog.writeLog("[ExportarModificacionesOk] Preparando ExcelLibrary");
		ExcelLibrary.DataSetHelper.CreateWorkbook(m, ds);


		ControlLog.writeLog("[ExportarModificacionesOk] Retornando...");
		return m;
	}


	/// <summary>
	/// Arma un Excel con la informacion del perfil actual del competidor
	/// </summary>
	/// <param name="strNickName">String con el NickName del Competidor</param>
	/// <param name="strId">String con el ID de DB</param>
	/// <returns>MemoryStream que debe ser enviado por el metodo Response.Output</returns>
	public static MemoryStream exportarXLSPerfil(string strNickName, string strId)
	{

		DataSet ds = new DataSet("New_DataSet");

		DataTable dtListaPreciosCompetidor = new DataTable("Lista de Precios " + strNickName);
		DataTable dtHistorialCompletoCalificaciones = new DataTable("Historial Completo (Calif.)");


		dtListaPreciosCompetidor.Columns.Add("Link");
		dtListaPreciosCompetidor.Columns.Add("Titulo");
		dtListaPreciosCompetidor.Columns.Add("Moneda");
		dtListaPreciosCompetidor.Columns.Add("Precio");
		dtListaPreciosCompetidor.Columns.Add("Cantidad que figuran vendidos");
		dtListaPreciosCompetidor.Columns.Add("Estado");

		dtHistorialCompletoCalificaciones.Columns.Add("Fecha");
		dtHistorialCompletoCalificaciones.Columns.Add("Link Producto");
		dtHistorialCompletoCalificaciones.Columns.Add("Titulo");
		dtHistorialCompletoCalificaciones.Columns.Add("ESTADO");
		dtHistorialCompletoCalificaciones.Columns.Add("Moneda");
		dtHistorialCompletoCalificaciones.Columns.Add("Precio");
		dtHistorialCompletoCalificaciones.Columns.Add("Usuario");
		dtHistorialCompletoCalificaciones.Columns.Add("Link de Usuario");
		dtHistorialCompletoCalificaciones.Columns.Add("Calificacion");
		dtHistorialCompletoCalificaciones.Columns.Add("Comentario");

		#region Obtener Productos
		try
		{
			DBMethods objConnection = new DBMethods();
			List<Producto> lstProducto = objConnection.getListaProductosFK(strId);
			if (lstProducto.Count > 0)
			{
				foreach (Producto objProducto in lstProducto)
				{
					dtListaPreciosCompetidor.Rows.Add(new object[] { objProducto.Link, objProducto.Titulo, objProducto.Moneda, objProducto.Precio, objProducto.CantVendido, objProducto.Estado });
				}
			}

		}
		catch (Exception ee)
		{
			ControlLog.writeLog("[exportarXLSPerfil] Excepcion buscando productos del competidor: " + ee.Message);
			throw ee;
		}
		#endregion

		#region Obtener Calificaciones
		try
		{
			DBMethods objConnection = new DBMethods();
			List<Calificacion> lstCalificaciones = objConnection.getListaCalificacionesFK(strId);
			if (lstCalificaciones.Count > 0)
			{


				foreach (Calificacion objCalificacion in lstCalificaciones)
				{

					/*
						dtHistorialCompletoCalificaciones.Columns.Add("Fecha");
						dtHistorialCompletoCalificaciones.Columns.Add("Link Producto");
						dtHistorialCompletoCalificaciones.Columns.Add("Titulo");
						dtHistorialCompletoCalificaciones.Columns.Add("ESTADO");
						dtHistorialCompletoCalificaciones.Columns.Add("Moneda");
						dtHistorialCompletoCalificaciones.Columns.Add("Usuario");
						dtHistorialCompletoCalificaciones.Columns.Add("Link de Usuario");
						dtHistorialCompletoCalificaciones.Columns.Add("Calificacion");
						dtHistorialCompletoCalificaciones.Columns.Add("Comentario");
					ControlLog.writeLog("[exportarXLSPerfil] Fecha Calif = " + objCalificacion.Fecha);
					ControlLog.writeLog("[exportarXLSPerfil] objCalificacion.Prod.Link = " + objCalificacion.Prod.Link);
					ControlLog.writeLog("[exportarXLSPerfil] objCalificacion.Prod.Titulo = " + objCalificacion.Prod.Titulo);
					ControlLog.writeLog("[exportarXLSPerfil] objCalificacion.Prod.Moneda.ToString() = " + objCalificacion.Prod.Moneda.ToString());
					ControlLog.writeLog("[exportarXLSPerfil] objCalificacion.Prod.Precio = " + objCalificacion.Prod.Precio);
					ControlLog.writeLog("[exportarXLSPerfil] objCalificacion.NickUsuario = " + objCalificacion.NickUsuario);
					ControlLog.writeLog("[exportarXLSPerfil] objCalificacion.LinkUsuario= " + objCalificacion.LinkUsuario);
					ControlLog.writeLog("[exportarXLSPerfil] objCalificacion.Calification " + objCalificacion.Calification.ToString());
					ControlLog.writeLog("[exportarXLSPerfil] objCalificacion.Comentario " + objCalificacion.Comentario);*/


					dtHistorialCompletoCalificaciones.Rows.Add(new object[] { objCalificacion.Fecha, objCalificacion.Prod.Link,
                                                                                    objCalificacion.Prod.Titulo, objCalificacion.Prod.Estado,objCalificacion.Prod.Moneda.ToString(),objCalificacion.Prod.Precio, 
                                                                                    objCalificacion.NickUsuario, objCalificacion.LinkUsuario, 
                                                                                    objCalificacion.Calification.ToString(), objCalificacion.Comentario });




				}
			}

		}
		catch (Exception ee)
		{
			ControlLog.writeLog("[exportarXLSPerfil] Excepcion buscando productos del competidor: " + ee.Message);
			throw ee;
		}



		#endregion




		ControlLog.writeLog("[exportarXLSPerfil] Agregando Tabla dtListaPreciosCompetidor");
		ds.Tables.Add(dtListaPreciosCompetidor);
		ControlLog.writeLog("[exportarXLSPerfil] Agregando Tabla dtHistorialCompletoCalificaciones");
		ds.Tables.Add(dtHistorialCompletoCalificaciones);

		ControlLog.writeLog("[exportarXLSPerfil] Preparando MemoryStream");
		MemoryStream m = new MemoryStream();

		ControlLog.writeLog("[exportarXLSPerfil] Preparando ExcelLibrary");
		ExcelLibrary.DataSetHelper.CreateWorkbook(m, ds);


		ControlLog.writeLog("[exportarXLSPerfil] Retornando...");
		return m;
	}
	#endregion

	#region Metodos Estaticos
	/// <summary>
	/// Valida que el nombre del archivo tenga caracteres validos
	/// Version 2.0.4.0
	/// </summary>
	/// <param name="strFileName">Nombre del archivo a validar</param>
	/// <returns>String con el nombre del archivo validado (eventualmente modificado para que sea valido)</returns>
	public static string validadorDeNombreDeArchivos(string strFileNameParam)
	{
		string strFileNameValid = strFileNameParam;

		/// Validar el caracter '/'
		/// 
		strFileNameValid = strFileNameValid.Replace('/', '_');

		return strFileNameValid;
	}
	#endregion

	public static MemoryStream ExportarImportadosOk()
	{

		DataSet ds = new DataSet("New_DataSet");

		DataTable dt = new DataTable("Productos importados Ok al " +
															System.DateTime.Now.Day.ToString().PadLeft(2, '0')
															+ "-"
															+ System.DateTime.Now.Month.ToString().PadLeft(2, '0')
															+ "-"
															+ System.DateTime.Now.Year.ToString().PadLeft(4, '0'));

		dt.Columns.Add("Titulo");
		dt.Columns.Add("Subtitulo");
		dt.Columns.Add("Cabecera");
		dt.Columns.Add("Moneda");
		dt.Columns.Add("Precio");
		dt.Columns.Add("Cantidad");
		dt.Columns.Add("Categoria");
		dt.Columns.Add("Link youtube");
		dt.Columns.Add("Parrafo 1");
		dt.Columns.Add("Parrafo 2");
		dt.Columns.Add("Parrafo 3");
		dt.Columns.Add("Pie de pagina");
		dt.Columns.Add("Imagenes del producto");
		dt.Columns.Add("Marquesina 1");
		dt.Columns.Add("Marquesina 2");
		dt.Columns.Add("Marquesina 3");
		dt.Columns.Add("Marquesina 4");
		dt.Columns.Add("Marquesina 5");
		dt.Columns.Add("Marquesina 6");
		dt.Columns.Add("Marquesina 7");
		dt.Columns.Add("Marquesina 8");
		dt.Columns.Add("Marquesina 9");
		dt.Columns.Add("Marquesina 10");
		dt.Columns.Add("Texto 1");
		dt.Columns.Add("Texto 2");
		dt.Columns.Add("Texto 3");
		dt.Columns.Add("Condicion");
		dt.Columns.Add("HTML Description");

		DBMethods objConnection = new DBMethods();
		List<ControlImportacionProductoML> lstProductosImportados = new List<ControlImportacionProductoML>();

		foreach (ControlImportacionProductoML objProducto in objConnection.obtenerPublicacionesPendientes(ControlSesion.session(ControlSesion.UsuarioLogin)))
		{


			ControlLog.writeLog(
									(objProducto.Images == null).ToString() + " - " +

									(objProducto.HtmlDescription == null).ToString());

			dt.Rows.Add(new object[] {  objProducto.Title,
                                        objProducto.Subtitle,
										objProducto.Header,
										objProducto.getCurrency(),
										objProducto.Price,
										objProducto.Quantity,
										objProducto.Categoria,
										objProducto.VideoLinkYouTube,
										objProducto.Specifications,
										objProducto.Description,
										objProducto.Features,
										objProducto.Bottom,
										objProducto.Images,
										objProducto.Marquee_1,
										objProducto.Marquee_2,
										objProducto.Marquee_3,
										objProducto.Marquee_4,
										objProducto.Marquee_5,
										objProducto.Marquee_6,
										objProducto.Marquee_7,
										objProducto.Marquee_8,
										objProducto.Marquee_9,
										objProducto.Marquee_10,
										objProducto.Text_1,
										objProducto.Text_2,
										objProducto.Text_3,
										objProducto.Condicion,
										objProducto.HtmlDescription 
                                            });

		}

		ControlLog.writeLog("[ExportarModificacionesOk] Agregando Tabla dt");
		ds.Tables.Add(dt);

		ControlLog.writeLog("[ExportarModificacionesOk] Preparando MemoryStream");
		MemoryStream m = new MemoryStream();

		ControlLog.writeLog("[ExportarModificacionesOk] Preparando ExcelLibrary");
		ExcelLibrary.DataSetHelper.CreateWorkbook(m, ds);


		ControlLog.writeLog("[ExportarModificacionesOk] Retornando...");
		return m;




	}

	public static MemoryStream ExportarProductosPublicadosOk()
	{

		DataSet ds = new DataSet("New_DataSet");

		DataTable dt = new DataTable("Productos publicados Ok al " +
															System.DateTime.Now.Day.ToString().PadLeft(2, '0')
															+ "-"
															+ System.DateTime.Now.Month.ToString().PadLeft(2, '0')
															+ "-"
															+ System.DateTime.Now.Year.ToString().PadLeft(4, '0'));

		dt.Columns.Add("Titulo");
		dt.Columns.Add("Id de ML");
		dt.Columns.Add("Link de Publicacion");
		dt.Columns.Add("Errores encontrados");


		DBMethods objConnection = new DBMethods();

		foreach (ControlPublicacionProductoML objProducto in objConnection.obtenerPublicacionesOk(ControlSesion.session(ControlSesion.UsuarioLogin)))
		{

			dt.Rows.Add(new object[] {  objProducto.getTitulo(),
                                        objProducto.getIdMl(),
										objProducto.getLinkDePublicacion(),
										objProducto.GetErrores()
									  });
		}

		ControlLog.writeLog("[ExportarProductosPublicadosOk] Agregando Tabla dt");
		ds.Tables.Add(dt);

		ControlLog.writeLog("[ExportarProductosPublicadosOk] Preparando MemoryStream");
		MemoryStream m = new MemoryStream();

		ControlLog.writeLog("[ExportarProductosPublicadosOk] Preparando ExcelLibrary");
		ExcelLibrary.DataSetHelper.CreateWorkbook(m, ds);


		ControlLog.writeLog("[ExportarProductosPublicadosOk] Retornando...");
		return m;


	}
	public static MemoryStream ExportarProductosPublicadosKo()
	{
		DataSet ds = new DataSet("New_DataSet");

		DataTable dt = new DataTable("Productos publicados Ko al " +
															System.DateTime.Now.Day.ToString().PadLeft(2, '0')
															+ "-"
															+ System.DateTime.Now.Month.ToString().PadLeft(2, '0')
															+ "-"
															+ System.DateTime.Now.Year.ToString().PadLeft(4, '0'));

		dt.Columns.Add("Titulo");
		dt.Columns.Add("Id de Producto");
		dt.Columns.Add("Fecha de Publicacion Erronea");
		dt.Columns.Add("Errores encontrados");


		DBMethods objConnection = new DBMethods();

		foreach (ControlPublicacionProductoML objProducto in objConnection.obtenerPublicacionesKo(ControlSesion.session(ControlSesion.UsuarioLogin)))
		{
			ControlLog.writeLog("[ExportarProductosPublicadosKo] FILA = [" + objProducto.getTitulo()
													+ " :: " + objProducto.GetIdDbPublicacion()
													+ " :: " + objProducto.FechaPublicacion
													+ " :: " + objProducto.GetErrores() + "]");
			dt.Rows.Add(new object[] {  objProducto.getTitulo(),
                                        objProducto.GetIdDbPublicacion(),
										objProducto.FechaPublicacion,
										objProducto.GetErrores()
									  });
		}

		ControlLog.writeLog("[ExportarProductosPublicadosKo] Agregando Tabla dt");
		ds.Tables.Add(dt);

		ControlLog.writeLog("[ExportarProductosPublicadosKo] Preparando MemoryStream");
		MemoryStream m = new MemoryStream();

		ControlLog.writeLog("[ExportarProductosPublicadosKo] Preparando ExcelLibrary");
		ExcelLibrary.DataSetHelper.CreateWorkbook(m, ds);


		ControlLog.writeLog("[ExportarProductosPublicadosKo] Retornando...");
		return m;
	}
}